package regist;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象发布者（通知者）.
 *
 * @author GongXincheng
 * @since 2019-09-23 15:07
 */
abstract class BaseSubject<T> {

    /**
     * 观察者列表.
     */
    private List<BaseObserver<T>> observerList = new ArrayList<>();

    /**
     * 通知需要传递的内容（通知者的状态）.
     */
    private T subjectStatus;

    /**
     * 调用 观察者 的行为方法.
     */
    abstract void doObserver();

    /**
     * 添加 观察者
     */
    abstract void add(BaseObserver<T> observer);

    /**
     * 添加 观察者
     */
    abstract void delete(BaseObserver<T> observer);

    //////////////////////////////////////////////////////////////


    public T getSubjectStatus() {
        return subjectStatus;
    }

    public void setSubjectStatus(T subjectStatus) {
        this.subjectStatus = subjectStatus;
    }

    public List<BaseObserver<T>> getObserverList() {
        return observerList;
    }

    public void setObserverList(List<BaseObserver<T>> observerList) {
        this.observerList = observerList;
    }
}
